package org.chnxi.study.datastructrues.hash;

public class EmpHashTable {

    private int size;//共有多少条链表

    private EmpLinkedList[] empLinkedListArr;

    /**
     * 初始化大小
     * @param size
     */
    public EmpHashTable(int size){
        this.size = size;
        empLinkedListArr = new EmpLinkedList[size];
        for (int i=0;i<size;i++){
            empLinkedListArr[i] = new EmpLinkedList();
        }
    }

    /**
     * 添加雇员
     * @param emp 雇员
     */
    public void add(Emp emp){
        //根据员工的id，得到该员工应该存放的链表
        int empLinkedListNo = hashFun(emp.getId());
        //将emp放入到链表中
        empLinkedListArr[empLinkedListNo].add(emp);
    }

    /**
     * 打印已经存在的雇员
     */
    public void list(){
        for (int i=0;i<size;i++){
            empLinkedListArr[i].list(i+1);
        }
    }

    /**
     * 使用取模模拟散列
     * @param id
     * @return
     */
    public int hashFun(int id){
        return id % size;
    }

    /**
     * 根据员工ID查找
     * @param id
     * @return 如果没找到返回null
     */
    public Emp findEmpById(int id){
        //根据员工的id，得到该员工应该存放的链表
        int empLinkedListNo = hashFun(id);
        Emp emp = empLinkedListArr[empLinkedListNo].findEmpById(id);
        return emp;
    }

    /**
     * 根据ID删除员工
     * @param id
     */
    public void delEmpById(int id){
        //根据员工的id，得到该员工应该存放的链表
        int empLinkedListNo = hashFun(id);
        empLinkedListArr[empLinkedListNo].delEmpById(id);
    }

}
